package com.dameng;

import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

/**
 * 注释属性测试
 *
 */
@Test(groups = "class-level-group")          // ① 类级别组，供 inheritGroups 演示
public class AnnotationAttributeTest {
    /* 1. alwaysRun = true —— 不管前面有没有失败/跳过，都会跑 */
    @AfterMethod(alwaysRun = true)
    public void tearDownAlways() {
        System.out.println("[@AfterMethod(alwaysRun=true)] 即使前面失败也会打印");
    }

    /* 2. onlyForGroups —— 仅当测试方法属于指定组时才跑 */
    @BeforeMethod(onlyForGroups = {"smoke"})
    public void prepareForSmoke() {
        System.out.println(">>> 只在 smoke 组测试方法前执行");
    }

    @Test(groups = "smoke")
    public void smokeTest() {
        System.out.println("smokeTest 仅属于 smoke 组");
    }

    /* 3. enabled = false —— 直接禁用 */
    @BeforeClass(enabled = false)
    public void willNotRun() {
        System.out.println("这行永远不会出现");
    }

    /* 4. groups + inheritGroups —— 把 before 方法也加进组
    *  意思是setup方法属于两个组（setup、class-level-group）；如果suit.xml尽管只运行其中的一个，setup方法也会被执行
    * */
    @BeforeMethod(groups = "setup", inheritGroups = true)
    public void setup() {
        System.out.println("[setup] 属于类级组+setup组");
    }

    /* 5. dependsOnGroups —— 整组依赖 */
    @Test(dependsOnGroups = "init")
    public void apiTest() {
        System.out.println("apiTest 在 init 组全部成功后才会执行");
    }

    /* 6. dependsOnMethods —— 单方法依赖 */
    @Test
    public void step1() {
        System.out.println("step1");
    }

    @Test(dependsOnMethods = "step1")
    public void step2() {
        System.out.println("step2 必须等 step1 成功");
    }

    /* 7. 普通测试方法，用来演示 onlyForGroups 不生效的情况 */
    @Test(groups = "regression")
    public void regressionTest() {
        System.out.println("regressionTest 不属于 smoke，所以 prepareForSmoke 不会跑");
    }
}

